﻿Public Class COrderSet_Screen2 : Inherits CStateBase

    ''' <summary>
    ''' 実行可能かを判断する
    ''' </summary>
    ''' <param name="task"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Overrides Function IsEnter(ByVal task As CTaskBase) As Boolean
        Debug.WriteLine("COrderSet_Screen2.IsEnter")
        If CCommon.isInStr(task.ActionCd, "ORDER_MODE") Then
            Return True
        Else
            Return False
        End If
    End Function

    ''' <summary>
    ''' 出荷情報のリスト画面
    ''' </summary>
    ''' <param name="task"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Overrides Function DoExecute(ByVal task As CTaskBase) As CStateBase
        Dim nextState As CStateBase = Nothing
        Dim pdaTask As CPDATask2 = DirectCast(task, CPDATask2)
        Dim webMng As CWebManager = CWebManager.GetInstance
        Dim AppManager As CApplicationManager = CApplicationManager.GetInstance

        'Dim waitTask As CPersonal = New CPersonal(pdaTask)
        Debug.WriteLine("COrderSet_Screen2.DoExecute...START")

        Dim StateDao As CMasterDAO = New CMasterDAO
        Dim app As CApplication = CApplication.GetInstance()
        Dim masterDao As New CMasterDAO
        Dim sql As CSQLite = app.MasterDB()
        Dim trx As CTransaction = sql.GetTransaction

        Try
            '読んだラベルをチェック
            Dim retSetCdLst As ArrayList = StateDao.GetSetCdList(trx, task.ProcessText)
            'MessageBox.Show("retSetCdLst.count:" & retSetCdLst.Count)

            '選択したらFalseなら選択してもラベル読む感じするように
            CCommon.FlagManage("ORDER_COMMIT", False)
            '最初の場合
            'SET_CDが複数かどうかの判別(普通のパタン)----------------------①SET_CDの件数
            If retSetCdLst.Count = 1 Then
                'MessageBox.Show("SET_CDは一つ")
                '選択されたすぐ、照合する
                CCommon.FlagManage("ORDER_COMMIT", True)

                'MessageBox.Show("COrder")
                'MessageBox.Show("retSetCdLst.count:" & retSetCdLst.Count)

                Select Case CEventCheck.SetCdCheck(pdaTask, retSetCdLst)
                    Case 0
                        '初期化-------------------------->>START
                        CEventCheck.initErrPdaTask(pdaTask)
                        '初期化-------------------------->>END
                        'エラーメッセージ表示
                        CPersonal.ErrorWindow2(pdaTask, EnumWindowMode.ALERT_MODE, _
                                            Color.Black, CConst.EnumSound.ALERT_BUZZ, "別のラベルセットです。", Color.White)

                    Case 1
                        'If pdaTask.OrderCd <> "" Then
                        '    Dim exitFlg As Boolean = False
                        '    For i As Integer = 0 To pdaTask.OrderCdSet.Count - 1
                        '        If pdaTask.OrderCd = pdaTask.OrderCdSet(i) Then
                        '            exitFlg = True
                        '            Exit For
                        '        End If
                        '    Next
                        '    If Not exitFlg Then
                        '        pdaTask.OrderCd = ""
                        '        pdaTask.ShiporderCd = ""
                        '        pdaTask.RowNum = ""
                        '    End If
                        'End If

                        '正常
                        'MessageBox.Show("SetCdCheck:TRUE")
                        'もし、ORDER_CDとSET_CDがあればそのままINSERTにする
                        'If pdaTask.OrderCd <> "" And pdaTask.SetCd <> "" Then

                        '    '注文のデータと読んだラベルと比べる
                        '    If CPersonal.ChkOrderDataSetCd(pdaTask) Then

                        '        If CPersonal.INSERT_ADD_LABEL(pdaTask) Then

                        '            pdaTask.WindowManager.ChangeWindowMode(EnumWindowMode.LIST_MODE)

                        '            Dim delRecord As ArrayList = New ArrayList()
                        '            For i As Integer = 0 To pdaTask.WindowManager.GetReportRecordCount - 1
                        '                Dim shpOrderData As COrderRecord = pdaTask.WindowManager.GetReportRecord(i)
                        '                delRecord.Add(shpOrderData)
                        '            Next
                        '            For j As Integer = 0 To delRecord.Count - 1
                        '                pdaTask.WindowManager.DelRecord(delRecord(j), True)
                        '            Next

                        '            '完全に照合成功
                        '            pdaTask.Hardware.nextC()
                        '            CCommon.FlagManage("ORDER_COMMIT", False)

                        '        End If
                        '    Else
                        '        'Dim listCount As Integer = pdaTask.WindowManager.GetRecordCount()
                        '        'For cn As Integer = 0 To listCount - 1
                        '        '    Dim setline As COrderRecord = pdaTask.WindowManager.GetRecord(cn)
                        '        '    If setline.OrderCd = pdaTask.OrderCd Then
                        '        '        setline.RowColor = Color.White
                        '        '        setline.IsSelectFlg = False
                        '        '        Exit For
                        '        '    End If
                        '        'Next
                        '        '選択解除--->>START
                        '        Dim setline As COrderRecord = pdaTask.WindowManager.GetCurrentRecord()
                        '        setline.RowColor = Color.White
                        '        setline.IsSelectFlg = False
                        '        '選択解除--->>END

                        '        '初期化-------------------------->>START
                        '        CEventCheck.initErrPdaTask(pdaTask)
                        '        '初期化-------------------------->>END
                        '        'エラーメッセージ表示
                        '        CPersonal.ErrorWindow2(pdaTask, EnumWindowMode.ALERT_MODE, _
                        '                            Color.Black, CConst.EnumSound.ALERT_BUZZ, CConst.CNS_MSG_007, Color.White)
                        '    End If

                        'Else
                        'MessageBox.Show("aa:" & retSetCdLst(0))
                        Dim retOrderDataLst As ArrayList = StateDao.GetOrderDataLst(trx, retSetCdLst(0))
                        'MessageBox.Show("result:" & retOrderDataLst.Count)
                        Dim labelNowData As CPersonal.strctNowLabelState = retOrderDataLst(0)

                        '今の出荷データと比較->絞るリストを作る
                        'MessageBox.Show("labelNowData:" & labelNowData.SysItemCd)
                        Dim retList As Integer = CPersonal.LabelSetCheck2(labelNowData, pdaTask)
                        'MessageBox.Show("retList.count:" & retList)
                        '出荷リストから一つ選らんでINSERTする
                        If retList = 1 Then
                            'MessageBox.Show("COrderScreen:" & pdaTask.OrderCd)
                            '一つなら保存
                            pdaTask.SetCd = retSetCdLst(0)
                            'そのままINSERTする

                            ''--->>ページが分けてるので読んだラベルの情報を検索 --->START


                            'リストの中にある注文を選択される為にイベント発生
                            pdaTask.WindowManager.SelectOrder(pdaTask.OrderCd)
                            'カソルを移動
                            pdaTask.WindowManager.SetCurrentOrder(pdaTask.OrderCd)



                            ''--->>ページが分けてるので読んだラベルの情報を検索 --->END

                            'MessageBox.Show("del 前")
                            '絞ったリストは削除---------------------->>START
                            Dim delRecord As ArrayList = New ArrayList()
                            For i As Integer = 0 To pdaTask.WindowManager.GetReportRecordCount - 1
                                Dim shpOrderData As COrderRecord = pdaTask.WindowManager.GetReportRecord(i)
                                delRecord.Add(shpOrderData)
                            Next
                            For j As Integer = 0 To delRecord.Count - 1
                                pdaTask.WindowManager.DelRecord(delRecord(j), True)
                            Next
                            'MessageBox.Show("del 後")
                            '絞ったリストは削除---------------------->>END


                            If CPersonal.INSERT_ADD_LABEL(pdaTask) Then
                                'これだけ特別
                                pdaTask.OrderCd = ""
                                '完全に照合成功
                                pdaTask.Hardware.nextC()
                                CCommon.FlagManage("ORDER_COMMIT", False)
                            Else

                                'INSERT失敗
                                '既に使用済みのもの
                                '初期化-------------------------->>START
                                CEventCheck.initErrPdaTask(pdaTask)
                                pdaTask.WindowManager.ChangeWindowMode(EnumWindowMode.LIST_MODE)

                            End If

                            ''重複チェック
                            'If masterDao.GetDoubleCheck(trx, pdaTask.SetCd) Then
                            '    If CPersonal.INSERT_ADD_LABEL(pdaTask) Then
                            '        'これだけ特別
                            '        pdaTask.OrderCd = ""
                            '        '完全に照合成功
                            '        pdaTask.Hardware.nextC()
                            '        CCommon.FlagManage("ORDER_COMMIT", False)
                            '    Else

                            '        'INSERT失敗
                            '        '既に使用済みのもの
                            '        '初期化-------------------------->>START
                            '        CEventCheck.initErrPdaTask(pdaTask)
                            '        pdaTask.WindowManager.ChangeWindowMode(EnumWindowMode.LIST_MODE)

                            '    End If
                            'Else

                            '    '重複エラー
                            '    '追加 10.09.24 LEE --->>START
                            '    '設定画面で重複可能不可能決めるように--->START
                            '    'ユニークコードチェック
                            '    CPersonal.ErrorWindow2(pdaTask, EnumWindowMode.ALERT_MODE, _
                            '                           Color.Black, CConst.EnumSound.ALERT_BUZZ, CConst.CNS_MSG_014, Color.White)
                            '    ''初期化START
                            '    CEventCheck.initErrPdaTask(pdaTask)
                            '    ''初期化END
                            '    task.ActionCd = "LABEL"
                            '    task.ProcessText = ""

                            '    'MessageBox.Show("セット重複です")
                            '    '設定画面で重複可能不可能決めるように--->END
                            '    '追加 10.09.24 LEE --->>END

                            'End If
                            

                            '画面で一致する出荷データが複数あり
                        ElseIf retList > 1 Then

                            '画面で選択が出来るように
                            CCommon.FlagManage("MULTI_ORDER", True)
                            CCommon.FlagManage("ORDER_COMMIT", True)

                            Dim exitFlg As Boolean = False
                            'pdaTask.OrderCd = ""
                            'MessageBox.Show("pdaTask.OrderCd:" & pdaTask.OrderCd)
                            For i As Integer = 0 To pdaTask.OrderCdSet.Count - 1
                                'MessageBox.Show("pdaTask.OrderCdSet(i):" & pdaTask.OrderCdSet(i))
                                If pdaTask.OrderCd = pdaTask.OrderCdSet(i) Then
                                    exitFlg = True
                                    Exit For
                                End If
                            Next
                            If Not exitFlg Then
                                'MessageBox.Show("orderCd削除-2")
                                'CCommon.FlagManage("ORDER_COMMIT", False)
                                pdaTask.OrderCd = ""
                                pdaTask.ShiporderCd = ""
                                pdaTask.RowNum = ""

                                For i As Integer = 0 To retSetCdLst.Count - 1
                                    Dim SearchLblData As ArrayList = StateDao.GetOrderDataLst(trx, retSetCdLst(i))
                                    For j As Integer = 0 To SearchLblData.Count - 1
                                        Dim labelData As CPersonal.strctNowLabelState = SearchLblData(j)
                                        '配列の中にデータがなければ
                                        If Not pdaTask.ReportDataUni.Contains(labelData.SetCd) Then
                                            '重複チェックのデータ
                                            pdaTask.ReportDataUni.Add(labelData.SetCd)
                                        End If
                                    Next
                                Next

                                '絞るリスト画面に表示
                                pdaTask.WindowManager.ChangeWindowMode(EnumWindowMode.REPORTLIST_MODE)
                            Else
                                'MessageBox.Show("ORDERCCCCC:" & pdaTask.OrderCd)

                                If CPersonal.INSERT_ADD_LABEL(pdaTask) Then
                                    '完全に照合成功
                                    pdaTask.Hardware.nextC()
                                    CCommon.FlagManage("ORDER_COMMIT", False)
                                Else
                                    'INSERT失敗
                                    '既に使用済みのもの
                                    '初期化-------------------------->>START
                                    CEventCheck.initErrPdaTask(pdaTask)
                                    pdaTask.WindowManager.ChangeWindowMode(EnumWindowMode.LIST_MODE)

                                End If
                            End If


                            'エラー
                        Else
                            '選択解除--->>START
                            Try
                                Dim setline As COrderRecord = pdaTask.WindowManager.GetCurrentRecord()
                                setline.RowColor = Color.White
                                setline.IsSelectFlg = False
                            Catch ex As Exception
                            End Try
                            '選択解除--->>END

                            ''初期化START
                            CEventCheck.initErrPdaTask(pdaTask)
                            ''初期化END
                            'エラーメッセージ表示
                            CPersonal.ErrorWindow2(pdaTask, EnumWindowMode.ALERT_MODE, _
                                                Color.Black, CConst.EnumSound.ALERT_BUZZ, CConst.CNS_MSG_007, Color.White)

                        End If
                        'End If
                End Select

                'SET_CDが複数の場合----------------------①SET_CDの件数 
            ElseIf retSetCdLst.Count > 1 Then
                '選択したらFalseなら選択してもラベル読む感じするように
                CCommon.FlagManage("ORDER_COMMIT", False)

                'SET_CDが複数になると出荷データを検索してカウント見て1以上の場合は
                'ラベル照合のリスト絞る
                '選択したらラベル照合データが選択され
                '出荷照合のデータを選択されるように、でも

                '7月14日の対象にするように--------------------START>>>>>>
                '出荷データと一致するデータ件数

                Select Case CEventCheck.LabelCheckListADD(pdaTask, retSetCdLst)

                    'ラベル照合データも、出荷データも複数存在なら
                    'ラベル照合リストを絞る
                    Case 0
                        '画面で選択が出来るように
                        CCommon.FlagManage("MULTI_ORDER", True)
                        'ラベル選択画面フラグ
                        CCommon.FlagManage("LABEL_CHECK_FLG", True)
                        '絞ったリスト画面に変わる
                        pdaTask.WindowManager.ChangeWindowMode(EnumWindowMode.LABEL_CHECK_MODE)

                    Case 1

                        'すぐ、INSERTするように
                        'ラベル照合絞るリストは削除
                        pdaTask.WindowManager.ReleaseLabelCheckList()
                        '絞ったリスト画面に変わる
                        pdaTask.WindowManager.ChangeWindowMode(EnumWindowMode.LABEL_CHECK_MODE)


                    Case 2
                        '選択解除--->>START
                        Dim setline As COrderRecord = pdaTask.WindowManager.GetCurrentRecord()
                        setline.RowColor = Color.White
                        setline.IsSelectFlg = False
                        '選択解除--->>END

                        '初期化-------------------------->>START
                        CEventCheck.initErrPdaTask(pdaTask)
                        '初期化-------------------------->>END
                        'エラーメッセージ表示
                        CPersonal.ErrorWindow2(pdaTask, EnumWindowMode.ALERT_MODE, _
                                            Color.Black, CConst.EnumSound.ALERT_BUZZ, CConst.CNS_MSG_007, Color.White)

                End Select

            Else
                '選択されてないかもしれないので
                Try
                    'エラー
                    '選択解除--->>START
                    Dim setline As COrderRecord = pdaTask.WindowManager.GetCurrentRecord()
                    setline.RowColor = Color.White
                    setline.IsSelectFlg = False
                    '選択解除--->>END
                Catch ex As Exception

                End Try
                '初期化-------------------------->>START
                CEventCheck.initErrPdaTask(pdaTask)
                '初期化-------------------------->>END
                'エラーメッセージ表示
                CPersonal.ErrorWindow2(pdaTask, EnumWindowMode.ALERT_MODE, _
                                    Color.Black, CConst.EnumSound.ALERT_BUZZ, CConst.CNS_MSG_007, Color.White)

            End If

        Catch ex As Exception
            'MessageBox.Show("COrderScreen:エラー:" & ex.Message)
        End Try
        task.ActionCd = "LABEL"
        task.ProcessText = ""
        nextState = GetNextState(task)
        Return nextState
    End Function

    ''' <summary>
    ''' 終了メソッド(未使用)
    ''' </summary>
    ''' <param name="task"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Overrides Function DoExit(ByVal task As CTaskBase) As Boolean
        Debug.WriteLine("COrderSet_Screen2.DoExit")
        Return True
    End Function


End Class
